{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {},
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "d:\\softwares\\python\\lib\\site-packages\\umap\\distances.py:1063: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n",
            "  @numba.jit()\n",
            "d:\\softwares\\python\\lib\\site-packages\\umap\\distances.py:1071: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n",
            "  @numba.jit()\n",
            "d:\\softwares\\python\\lib\\site-packages\\umap\\distances.py:1086: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n",
            "  @numba.jit()\n",
            "d:\\softwares\\python\\lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
            "  from .autonotebook import tqdm as notebook_tqdm\n",
            "d:\\softwares\\python\\lib\\site-packages\\umap\\umap_.py:660: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n",
            "  @numba.jit()\n"
          ]
        }
      ],
      "source": [
        "import numpy as np\n",
        "from bertopic import BERTopic\n",
        "from sentence_transformers import SentenceTransformer\n",
        "from sklearn.feature_extraction.text import CountVectorizer\n",
        "from transformers.pipelines import pipeline\n",
        "from umap import UMAP\n",
        "from hdbscan import HDBSCAN\n",
        "from sklearn.feature_extraction.text import CountVectorizer"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# 加载数据"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "条数:  1000\n",
            "预览第一条:  文旅文 创看 洛阳 河南省 文旅文创 发展 大会 本次 大会 安排 项目 签约 主要 方面 内容 一是 文旅 产业 项目 签约 截至 目前 梳理 重点 文旅 项目 投资总额 525.6 亿元 遴选 重大项目 进行 现场 签约 投资总额 365.8 亿元 项目 包括 文物 数字化 开发 文化 创意 园区 建设 文化 项目 涵盖 旅游 度假区 建设 旅游 酒店 民宿 打造 旅游 项目 既有 旅游 景区 开发 商旅 综合体 建设 传统 业态 项目 宇宙 基地 沉浸 演艺 业态 项目 充分体现 我省 文化 旅游 发展 特点 趋势 二是 引客 入豫 项目 签约 主要 我省 文旅 部门 文旅 企业 头部 旅行 知名 OTA 平台 重点 客源地 文旅 部门 签订 引客 入豫 协议 持续 拓展 省外 客源 市场\n",
            "\n"
          ]
        }
      ],
      "source": [
        "# step1 加载文件\n",
        "with open('../../data/切词.txt', 'r', encoding='utf-8') as file:\n",
        "  docs = file.readlines()\n",
        "print('条数: ', len(docs))\n",
        "print('预览第一条: ', docs[0])\n",
        "\n",
        "vectorizer_model = None"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# 创建"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {},
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "Some weights of the model checkpoint at bert-base-chinese were not used when initializing BertModel: ['cls.seq_relationship.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.dense.weight']\n",
            "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
            "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(1000, 768)\n"
          ]
        }
      ],
      "source": [
        "# 1. 词向量模型，同时加载本地训练好的词向量\n",
        "embedding_model = pipeline(\"feature-extraction\", model=\"bert-base-chinese\") # 使用bert-base-chinese\n",
        "embeddings = np.load('../../data/embedding_bbc.npy') # 使用bert-base-chinese向量\n",
        "print(embeddings.shape)\n",
        "\n",
        "# 2. 创建分词模型\n",
        "vectorizer_model = CountVectorizer() # 因为我们已经分好词了，所以这里不需要传入分词函数了\n",
        "\n",
        "# 3. 创建UMAP降维模型\n",
        "umap_model = UMAP(\n",
        "  n_neighbors=15,\n",
        "  n_components=5,\n",
        "  min_dist=0.0,\n",
        "  metric='cosine',\n",
        "  random_state=30  # ⚠️ 防止随机 https://maartengr.github.io/BERTopic/faq.html\n",
        ")\n",
        "\n",
        "# 4. 创建HDBSCAN聚类模型\n",
        "# 如果要建设离群值，可以减小下面两个参数\n",
        "# https://hdbscan.readthedocs.io/en/latest/faq.html\n",
        "hdbscan_model = HDBSCAN(\n",
        "  min_cluster_size=10,\n",
        "  min_samples=5,\n",
        ")\n",
        "\n",
        "# 5. 创建CountVectorizer模型\n",
        "vectorizer_model = CountVectorizer(stop_words=['洛阳', '旅游', '文化'])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Topic</th>\n",
              "      <th>Count</th>\n",
              "      <th>Name</th>\n",
              "      <th>Representation</th>\n",
              "      <th>Representative_Docs</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>-1</td>\n",
              "      <td>335</td>\n",
              "      <td>-1_景区_城市_河南_中国</td>\n",
              "      <td>[景区, 城市, 河南, 中国, 游客, 活动, 洛阳市, 博物馆, 遗址, 栾川]</td>\n",
              "      <td>[河南 多家 景区 陆续 发布 开园 公告 台风 杜苏芮 强度 逐渐 减弱 河南 景区 陆续...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>60</td>\n",
              "      <td>0_活动_门票_景区_免费</td>\n",
              "      <td>[活动, 门票, 景区, 免费, 时间, 高速, 栾川, 地图, 白云山, 游客]</td>\n",
              "      <td>[洛阳 身边 自驾游 栾川 高速 免费 答疑 自驾游 栾川 高速 费全免 问题 需要 了解 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1</td>\n",
              "      <td>58</td>\n",
              "      <td>1_王府_竹海_旅行_河南</td>\n",
              "      <td>[王府, 竹海, 旅行, 河南, 景区, 仙门, 旅游区, 中国, 三彩, 栾川]</td>\n",
              "      <td>[旅行 推荐 旅行 冬天 就要 穿过 中国 zui 天门 广东 zui 早古 驿道 仙气 飘...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>2</td>\n",
              "      <td>50</td>\n",
              "      <td>2_石窟_中国_龙门石窟_艺术</td>\n",
              "      <td>[石窟, 中国, 龙门石窟, 艺术, 世界, 文化遗产, 少林寺, 朝代, 造像, 石刻]</td>\n",
              "      <td>[洛阳 周边游 龙门石窟 中国 石刻 艺术 宝库 现为 世界 文化遗产 全国 重点 文物保护...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>3</td>\n",
              "      <td>47</td>\n",
              "      <td>3_旅客_年票_客流_郑州</td>\n",
              "      <td>[旅客, 年票, 客流, 郑州, 列车, 客运, 发送, 出行, 公交, 高速]</td>\n",
              "      <td>[今天 郑州 铁路 预计 发送 旅客 51.7 万人 管内 客流量 激增 中国 铁路 郑州 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>4</td>\n",
              "      <td>43</td>\n",
              "      <td>4_机场_建设_规划_项目</td>\n",
              "      <td>[机场, 建设, 规划, 项目, 自驾车, 高铁, 铁路, 航线, 黄河, 国家]</td>\n",
              "      <td>[国家 发展 改革 印发 汉江 生态 经济带 发展 规划 通知 汉江 生态 经济带 规划 范...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>5</td>\n",
              "      <td>42</td>\n",
              "      <td>5_地方_很多_一天_一点</td>\n",
              "      <td>[地方, 很多, 一天, 一点, 已经, 时间, 古城, 酒店, 西安, 感受]</td>\n",
              "      <td>[洛阳 值得 一去 地方 简单 下来 洛阳 旅游 攻略 建议 夏天 洛阳 洛阳 市区 主要 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>6</td>\n",
              "      <td>41</td>\n",
              "      <td>6_泉州_洛阳桥_旅行_历史</td>\n",
              "      <td>[泉州, 洛阳桥, 旅行, 历史, 济南, 中国, 黄陂, 沧州, 古城, 洛邑]</td>\n",
              "      <td>[海丝 泉州 夏天 清晨 洛阳桥 洛阳 日出 夏天 清晨 来到 泉州 洛阳桥 沐浴 晨光 长...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>7</td>\n",
              "      <td>34</td>\n",
              "      <td>7_工作_集团_河洛_建设</td>\n",
              "      <td>[工作, 集团, 河洛, 建设, 投资, 项目, 发展, 大鼓, 服务, 进行]</td>\n",
              "      <td>[地方 国资 洛阳市 国资委 检查组 检查 督导 洛阳 文化 旅游 投资 集团 国企改革 三...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>8</td>\n",
              "      <td>32</td>\n",
              "      <td>8_游客_景区_午餐_老君山</td>\n",
              "      <td>[游客, 景区, 午餐, 老君山, 网友, 河南, 表示, 同学, 卷入, 孙军范]</td>\n",
              "      <td>[无人 值守 一元 午餐 结账 多出 国庆 假期 景区 连续 推出 午餐 共售 游客 点赞 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>9</td>\n",
              "      <td>31</td>\n",
              "      <td>9_河南_造纸_巩义_历史</td>\n",
              "      <td>[河南, 造纸, 巩义, 历史, 龙亭, 江南, 中国, 故城, 考古队, 善良]</td>\n",
              "      <td>[心眼 人缘 太上 心起 而吉神 随之 善念 力量 不容 小觑 不知不觉 便会 带来 巨大 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>10</td>\n",
              "      <td>30</td>\n",
              "      <td>10_项目_消费_文旅_发展</td>\n",
              "      <td>[项目, 消费, 文旅, 发展, 建设, 国家, 打造, 全省, 森林, 示范]</td>\n",
              "      <td>[中国 洛阳 本地 攻略 洛阳 成为 首批 国家 文化 旅游 消费 示范 城市 造浪 生活 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>11</td>\n",
              "      <td>28</td>\n",
              "      <td>11_银杏_文旅文创_发展_大会</td>\n",
              "      <td>[银杏, 文旅文创, 发展, 大会, 中国, 主题, 河南, 白云山, 行走, 读懂]</td>\n",
              "      <td>[旅行 千年 银杏 白云 盛景 洛阳 嵩县 白云山 第九届 银杏 文化节 主题 活动 隆重开...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>12</td>\n",
              "      <td>28</td>\n",
              "      <td>12_广济桥_位于_白马寺_建筑</td>\n",
              "      <td>[广济桥, 位于, 白马寺, 建筑, 鸡冠, 周王城, 始建, 潮州, 大理, 理由]</td>\n",
              "      <td>[车载 民生 行天下 河南 旅游 行天下 汽车票 旅游 风景 智慧 购票 便民 出行 河南 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>13</td>\n",
              "      <td>27</td>\n",
              "      <td>13_防控_疫情_景区_开放</td>\n",
              "      <td>[防控, 疫情, 景区, 开放, 场所, 关闭, 恢复, 人员, 娱乐场所, 落实]</td>\n",
              "      <td>[洛阳 即日起 洛阳 暂时 关闭 网吧 KTV 人员 聚集 密闭 场所 小编 刚刚 洛阳市 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>14</td>\n",
              "      <td>20</td>\n",
              "      <td>14_五一_数据_预订_增长</td>\n",
              "      <td>[五一, 数据, 预订, 增长, 热门, 假期, 显示, 上海, 同期, 国内]</td>\n",
              "      <td>[携程 联合 新华 财经 发布 五一 旅行 数据 报告 报告 显示 北京 热门 旅游 城市 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>15</td>\n",
              "      <td>20</td>\n",
              "      <td>15_写真_发团_成人_儿童</td>\n",
              "      <td>[写真, 发团, 成人, 儿童, 地点, 露营, 不良, 畅收, 拍照, 郑州]</td>\n",
              "      <td>[南阳 南阳 山水 周边 发团 线路 一日游 七十二 一日游 发团 畅收 武当 大明 一日游...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17</th>\n",
              "      <td>16</td>\n",
              "      <td>19</td>\n",
              "      <td>16_博物馆_历史_停车场_白马寺</td>\n",
              "      <td>[博物馆, 历史, 停车场, 白马寺, 建设, 汉唐, 人大代表, 两会, 考古, 文旅]</td>\n",
              "      <td>[洛阳 爆料 洛阳 生活 接待 游客 万人次 洛阳 二里头 夏都 遗址 博物馆 成新 文旅 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>18</th>\n",
              "      <td>17</td>\n",
              "      <td>19</td>\n",
              "      <td>17_景区_度假区_公示_等级</td>\n",
              "      <td>[景区, 度假区, 公示, 等级, 评定, 质量, 4a, 河南省, 国家, 名单]</td>\n",
              "      <td>[许昌 身边 许昌 一处 4A 景区 近日 河南省旅游局 发布 公示 确定 景区 入围 国家...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>19</th>\n",
              "      <td>18</td>\n",
              "      <td>14</td>\n",
              "      <td>18_话题_大寒_隋唐洛阳城_同安</td>\n",
              "      <td>[话题, 大寒, 隋唐洛阳城, 同安, 风起, 应天门, 奇缘, 厦门, 沉浸, 眼中]</td>\n",
              "      <td>[跟着 风起 洛阳 一座 成全 一部 电视剧 风起 洛阳 热播 风起 洛阳 取景 洛阳 华夏...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>20</th>\n",
              "      <td>19</td>\n",
              "      <td>12</td>\n",
              "      <td>19_福昌_龙门石窟_城隍庙_龙门</td>\n",
              "      <td>[福昌, 龙门石窟, 城隍庙, 龙门, 博物馆, 位于, 石窟, 陈列, 中国, 标本]</td>\n",
              "      <td>[吕梁 旅行 吕梁 汾酒 竖石 佛村 摩崖 造像 时代 地址 交城县 北部 山区 岭底 始凿...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>21</th>\n",
              "      <td>20</td>\n",
              "      <td>10</td>\n",
              "      <td>20_民宿_酒店_巧克力_孩子</td>\n",
              "      <td>[民宿, 酒店, 巧克力, 孩子, 余舍, 生活, 空间, 不同, 咖啡, 莱德]</td>\n",
              "      <td>[世界 不见不散 爱上 酒店 点评 一定 想象 不到 洛阳 重渡 一家 隐藏 民宿 旅行 住...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "    Topic  Count               Name  \\\n",
              "0      -1    335     -1_景区_城市_河南_中国   \n",
              "1       0     60      0_活动_门票_景区_免费   \n",
              "2       1     58      1_王府_竹海_旅行_河南   \n",
              "3       2     50    2_石窟_中国_龙门石窟_艺术   \n",
              "4       3     47      3_旅客_年票_客流_郑州   \n",
              "5       4     43      4_机场_建设_规划_项目   \n",
              "6       5     42      5_地方_很多_一天_一点   \n",
              "7       6     41     6_泉州_洛阳桥_旅行_历史   \n",
              "8       7     34      7_工作_集团_河洛_建设   \n",
              "9       8     32     8_游客_景区_午餐_老君山   \n",
              "10      9     31      9_河南_造纸_巩义_历史   \n",
              "11     10     30     10_项目_消费_文旅_发展   \n",
              "12     11     28   11_银杏_文旅文创_发展_大会   \n",
              "13     12     28   12_广济桥_位于_白马寺_建筑   \n",
              "14     13     27     13_防控_疫情_景区_开放   \n",
              "15     14     20     14_五一_数据_预订_增长   \n",
              "16     15     20     15_写真_发团_成人_儿童   \n",
              "17     16     19  16_博物馆_历史_停车场_白马寺   \n",
              "18     17     19    17_景区_度假区_公示_等级   \n",
              "19     18     14  18_话题_大寒_隋唐洛阳城_同安   \n",
              "20     19     12  19_福昌_龙门石窟_城隍庙_龙门   \n",
              "21     20     10    20_民宿_酒店_巧克力_孩子   \n",
              "\n",
              "                                   Representation  \\\n",
              "0      [景区, 城市, 河南, 中国, 游客, 活动, 洛阳市, 博物馆, 遗址, 栾川]   \n",
              "1       [活动, 门票, 景区, 免费, 时间, 高速, 栾川, 地图, 白云山, 游客]   \n",
              "2       [王府, 竹海, 旅行, 河南, 景区, 仙门, 旅游区, 中国, 三彩, 栾川]   \n",
              "3   [石窟, 中国, 龙门石窟, 艺术, 世界, 文化遗产, 少林寺, 朝代, 造像, 石刻]   \n",
              "4        [旅客, 年票, 客流, 郑州, 列车, 客运, 发送, 出行, 公交, 高速]   \n",
              "5       [机场, 建设, 规划, 项目, 自驾车, 高铁, 铁路, 航线, 黄河, 国家]   \n",
              "6        [地方, 很多, 一天, 一点, 已经, 时间, 古城, 酒店, 西安, 感受]   \n",
              "7       [泉州, 洛阳桥, 旅行, 历史, 济南, 中国, 黄陂, 沧州, 古城, 洛邑]   \n",
              "8        [工作, 集团, 河洛, 建设, 投资, 项目, 发展, 大鼓, 服务, 进行]   \n",
              "9      [游客, 景区, 午餐, 老君山, 网友, 河南, 表示, 同学, 卷入, 孙军范]   \n",
              "10      [河南, 造纸, 巩义, 历史, 龙亭, 江南, 中国, 故城, 考古队, 善良]   \n",
              "11       [项目, 消费, 文旅, 发展, 建设, 国家, 打造, 全省, 森林, 示范]   \n",
              "12    [银杏, 文旅文创, 发展, 大会, 中国, 主题, 河南, 白云山, 行走, 读懂]   \n",
              "13    [广济桥, 位于, 白马寺, 建筑, 鸡冠, 周王城, 始建, 潮州, 大理, 理由]   \n",
              "14     [防控, 疫情, 景区, 开放, 场所, 关闭, 恢复, 人员, 娱乐场所, 落实]   \n",
              "15       [五一, 数据, 预订, 增长, 热门, 假期, 显示, 上海, 同期, 国内]   \n",
              "16       [写真, 发团, 成人, 儿童, 地点, 露营, 不良, 畅收, 拍照, 郑州]   \n",
              "17  [博物馆, 历史, 停车场, 白马寺, 建设, 汉唐, 人大代表, 两会, 考古, 文旅]   \n",
              "18     [景区, 度假区, 公示, 等级, 评定, 质量, 4a, 河南省, 国家, 名单]   \n",
              "19   [话题, 大寒, 隋唐洛阳城, 同安, 风起, 应天门, 奇缘, 厦门, 沉浸, 眼中]   \n",
              "20   [福昌, 龙门石窟, 城隍庙, 龙门, 博物馆, 位于, 石窟, 陈列, 中国, 标本]   \n",
              "21      [民宿, 酒店, 巧克力, 孩子, 余舍, 生活, 空间, 不同, 咖啡, 莱德]   \n",
              "\n",
              "                                  Representative_Docs  \n",
              "0   [河南 多家 景区 陆续 发布 开园 公告 台风 杜苏芮 强度 逐渐 减弱 河南 景区 陆续...  \n",
              "1   [洛阳 身边 自驾游 栾川 高速 免费 答疑 自驾游 栾川 高速 费全免 问题 需要 了解 ...  \n",
              "2   [旅行 推荐 旅行 冬天 就要 穿过 中国 zui 天门 广东 zui 早古 驿道 仙气 飘...  \n",
              "3   [洛阳 周边游 龙门石窟 中国 石刻 艺术 宝库 现为 世界 文化遗产 全国 重点 文物保护...  \n",
              "4   [今天 郑州 铁路 预计 发送 旅客 51.7 万人 管内 客流量 激增 中国 铁路 郑州 ...  \n",
              "5   [国家 发展 改革 印发 汉江 生态 经济带 发展 规划 通知 汉江 生态 经济带 规划 范...  \n",
              "6   [洛阳 值得 一去 地方 简单 下来 洛阳 旅游 攻略 建议 夏天 洛阳 洛阳 市区 主要 ...  \n",
              "7   [海丝 泉州 夏天 清晨 洛阳桥 洛阳 日出 夏天 清晨 来到 泉州 洛阳桥 沐浴 晨光 长...  \n",
              "8   [地方 国资 洛阳市 国资委 检查组 检查 督导 洛阳 文化 旅游 投资 集团 国企改革 三...  \n",
              "9   [无人 值守 一元 午餐 结账 多出 国庆 假期 景区 连续 推出 午餐 共售 游客 点赞 ...  \n",
              "10  [心眼 人缘 太上 心起 而吉神 随之 善念 力量 不容 小觑 不知不觉 便会 带来 巨大 ...  \n",
              "11  [中国 洛阳 本地 攻略 洛阳 成为 首批 国家 文化 旅游 消费 示范 城市 造浪 生活 ...  \n",
              "12  [旅行 千年 银杏 白云 盛景 洛阳 嵩县 白云山 第九届 银杏 文化节 主题 活动 隆重开...  \n",
              "13  [车载 民生 行天下 河南 旅游 行天下 汽车票 旅游 风景 智慧 购票 便民 出行 河南 ...  \n",
              "14  [洛阳 即日起 洛阳 暂时 关闭 网吧 KTV 人员 聚集 密闭 场所 小编 刚刚 洛阳市 ...  \n",
              "15  [携程 联合 新华 财经 发布 五一 旅行 数据 报告 报告 显示 北京 热门 旅游 城市 ...  \n",
              "16  [南阳 南阳 山水 周边 发团 线路 一日游 七十二 一日游 发团 畅收 武当 大明 一日游...  \n",
              "17  [洛阳 爆料 洛阳 生活 接待 游客 万人次 洛阳 二里头 夏都 遗址 博物馆 成新 文旅 ...  \n",
              "18  [许昌 身边 许昌 一处 4A 景区 近日 河南省旅游局 发布 公示 确定 景区 入围 国家...  \n",
              "19  [跟着 风起 洛阳 一座 成全 一部 电视剧 风起 洛阳 热播 风起 洛阳 取景 洛阳 华夏...  \n",
              "20  [吕梁 旅行 吕梁 汾酒 竖石 佛村 摩崖 造像 时代 地址 交城县 北部 山区 岭底 始凿...  \n",
              "21  [世界 不见不散 爱上 酒店 点评 一定 想象 不到 洛阳 重渡 一家 隐藏 民宿 旅行 住...  "
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "topic_model = BERTopic(\n",
        "  embedding_model=embedding_model,\n",
        "  vectorizer_model=vectorizer_model,\n",
        "  umap_model=umap_model,\n",
        "  hdbscan_model=hdbscan_model,\n",
        ")\n",
        "\n",
        "topics, probs = topic_model.fit_transform(docs, embeddings=embeddings) #传入训练好的词向量\n",
        "topic_info = topic_model.get_topic_info()\n",
        "topic_info"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# 层次聚类"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {},
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "100%|██████████| 20/20 [00:00<00:00, 244.93it/s]\n"
          ]
        },
        {
          "data": {
            "application/vnd.plotly.v1+json": {
              "config": {
                "plotlyServerURL": "https://plot.ly"
              },
              "data": [
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(61,153,112)"
                  },
                  "mode": "lines",
                  "text": [
                    "福昌_龙门石窟_城隍庙_龙门_博物馆",
                    "",
                    "",
                    "石窟_中国_龙门石窟_艺术_世界"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.5057545992385941,
                    0.5057545992385941,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -5,
                    -5,
                    -15,
                    -15
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(255,65,54)"
                  },
                  "mode": "lines",
                  "text": [
                    "泉州_洛阳桥_旅行_历史_济南",
                    "",
                    "",
                    "王府_竹海_旅行_河南_景区"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.7136400838677608,
                    0.7136400838677608,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -35,
                    -35,
                    -45,
                    -45
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(255,65,54)"
                  },
                  "mode": "lines",
                  "text": [
                    "旅行_王府_竹海_泉州_河南",
                    "",
                    "",
                    "广济桥_位于_白马寺_建筑_鸡冠"
                  ],
                  "type": "scatter",
                  "x": [
                    0.7136400838677608,
                    0.758998907068849,
                    0.758998907068849,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -40,
                    -40,
                    -55,
                    -55
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(255,65,54)"
                  },
                  "mode": "lines",
                  "text": [
                    "河南_造纸_巩义_历史_龙亭",
                    "",
                    "",
                    "旅行_历史_河南_中国_泉州"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.8692835965278367,
                    0.8692835965278367,
                    0.758998907068849
                  ],
                  "xaxis": "x",
                  "y": [
                    -25,
                    -25,
                    -47.5,
                    -47.5
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(255,65,54)"
                  },
                  "mode": "lines",
                  "text": [
                    "地方_很多_一天_一点_已经",
                    "",
                    "",
                    "写真_发团_成人_儿童_地点"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.8010566606343938,
                    0.8010566606343938,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -75,
                    -75,
                    -85,
                    -85
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(255,65,54)"
                  },
                  "mode": "lines",
                  "text": [
                    "民宿_酒店_巧克力_孩子_余舍",
                    "",
                    "",
                    "地方_西安_很多_一天_写真"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.9006034133878535,
                    0.9006034133878535,
                    0.8010566606343938
                  ],
                  "xaxis": "x",
                  "y": [
                    -65,
                    -65,
                    -80,
                    -80
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(255,65,54)"
                  },
                  "mode": "lines",
                  "text": [
                    "民宿_酒店_地方_西安_很多",
                    "",
                    "",
                    "话题_大寒_隋唐洛阳城_同安_风起"
                  ],
                  "type": "scatter",
                  "x": [
                    0.9006034133878535,
                    0.9325433489328923,
                    0.9325433489328923,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -72.5,
                    -72.5,
                    -95,
                    -95
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(255,65,54)"
                  },
                  "mode": "lines",
                  "text": [
                    "旅行_历史_河南_中国_泉州",
                    "",
                    "",
                    "酒店_民宿_地方_感受_体验"
                  ],
                  "type": "scatter",
                  "x": [
                    0.8692835965278367,
                    0.9551646121727781,
                    0.9551646121727781,
                    0.9325433489328923
                  ],
                  "xaxis": "x",
                  "y": [
                    -36.25,
                    -36.25,
                    -83.75,
                    -83.75
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(0,116,217)"
                  },
                  "mode": "lines",
                  "text": [
                    "龙门石窟_石窟_中国_艺术_世界",
                    "",
                    "",
                    "旅行_河南_历史_中国_地方"
                  ],
                  "type": "scatter",
                  "x": [
                    0.5057545992385941,
                    1.1205479190532555,
                    1.1205479190532555,
                    0.9551646121727781
                  ],
                  "xaxis": "x",
                  "y": [
                    -10,
                    -10,
                    -60,
                    -60
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(35,205,205)"
                  },
                  "mode": "lines",
                  "text": [
                    "银杏_文旅文创_发展_大会_中国",
                    "",
                    "",
                    "博物馆_历史_停车场_白马寺_建设"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.7425811099159476,
                    0.7425811099159476,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -105,
                    -105,
                    -115,
                    -115
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(35,205,205)"
                  },
                  "mode": "lines",
                  "text": [
                    "机场_建设_规划_项目_自驾车",
                    "",
                    "",
                    "项目_消费_文旅_发展_建设"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.6267200852145871,
                    0.6267200852145871,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -125,
                    -125,
                    -135,
                    -135
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(35,205,205)"
                  },
                  "mode": "lines",
                  "text": [
                    "项目_建设_机场_国家_发展",
                    "",
                    "",
                    "工作_集团_河洛_建设_投资"
                  ],
                  "type": "scatter",
                  "x": [
                    0.6267200852145871,
                    0.7005901732768767,
                    0.7005901732768767,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -130,
                    -130,
                    -145,
                    -145
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(35,205,205)"
                  },
                  "mode": "lines",
                  "text": [
                    "博物馆_银杏_发展_中国_文旅文创",
                    "",
                    "",
                    "项目_建设_发展_规划_工作"
                  ],
                  "type": "scatter",
                  "x": [
                    0.7425811099159476,
                    0.7674165525662214,
                    0.7674165525662214,
                    0.7005901732768767
                  ],
                  "xaxis": "x",
                  "y": [
                    -110,
                    -110,
                    -137.5,
                    -137.5
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(133,20,75)"
                  },
                  "mode": "lines",
                  "text": [
                    "景区_度假区_公示_等级_评定",
                    "",
                    "",
                    "防控_疫情_景区_开放_场所"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.7908057650730669,
                    0.7908057650730669,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -155,
                    -155,
                    -165,
                    -165
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(133,20,75)"
                  },
                  "mode": "lines",
                  "text": [
                    "活动_门票_景区_免费_时间",
                    "",
                    "",
                    "旅客_年票_客流_郑州_列车"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.7068023546461416,
                    0.7068023546461416,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -175,
                    -175,
                    -185,
                    -185
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(133,20,75)"
                  },
                  "mode": "lines",
                  "text": [
                    "景区_防控_疫情_开放_度假区",
                    "",
                    "",
                    "旅客_景区_高速_门票_年票"
                  ],
                  "type": "scatter",
                  "x": [
                    0.7908057650730669,
                    0.8615560656892243,
                    0.8615560656892243,
                    0.7068023546461416
                  ],
                  "xaxis": "x",
                  "y": [
                    -160,
                    -160,
                    -180,
                    -180
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(133,20,75)"
                  },
                  "mode": "lines",
                  "text": [
                    "游客_景区_午餐_老君山_网友",
                    "",
                    "",
                    "五一_数据_预订_增长_热门"
                  ],
                  "type": "scatter",
                  "x": [
                    0,
                    0.8217866214335633,
                    0.8217866214335633,
                    0
                  ],
                  "xaxis": "x",
                  "y": [
                    -195,
                    -195,
                    -205,
                    -205
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(133,20,75)"
                  },
                  "mode": "lines",
                  "text": [
                    "景区_旅客_郑州_年票_高速",
                    "",
                    "",
                    "游客_景区_显示_假期_五一"
                  ],
                  "type": "scatter",
                  "x": [
                    0.8615560656892243,
                    0.9151234346297069,
                    0.9151234346297069,
                    0.8217866214335633
                  ],
                  "xaxis": "x",
                  "y": [
                    -170,
                    -170,
                    -200,
                    -200
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(0,116,217)"
                  },
                  "mode": "lines",
                  "text": [
                    "建设_项目_发展_博物馆_工作",
                    "",
                    "",
                    "景区_游客_旅客_郑州_门票"
                  ],
                  "type": "scatter",
                  "x": [
                    0.7674165525662214,
                    1.1310707399068711,
                    1.1310707399068711,
                    0.9151234346297069
                  ],
                  "xaxis": "x",
                  "y": [
                    -123.75,
                    -123.75,
                    -185,
                    -185
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "marker": {
                    "color": "rgb(0,116,217)"
                  },
                  "mode": "lines",
                  "text": [
                    "中国_龙门石窟_石窟_旅行_河南",
                    "",
                    "",
                    "景区_游客_项目_活动_发展"
                  ],
                  "type": "scatter",
                  "x": [
                    1.1205479190532555,
                    1.322405502927335,
                    1.322405502927335,
                    1.1310707399068711
                  ],
                  "xaxis": "x",
                  "y": [
                    -35,
                    -35,
                    -154.375,
                    -154.375
                  ],
                  "yaxis": "y"
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "旅行_王府_竹海_泉州_河南",
                    "民宿_酒店_地方_西安_很多",
                    "旅行_历史_河南_中国_泉州",
                    "龙门石窟_石窟_中国_艺术_世界",
                    "项目_建设_机场_国家_发展",
                    "博物馆_银杏_发展_中国_文旅文创",
                    "景区_防控_疫情_开放_度假区",
                    "景区_旅客_郑州_年票_高速",
                    "建设_项目_发展_博物馆_工作",
                    "中国_龙门石窟_石窟_旅行_河南"
                  ],
                  "marker": {
                    "color": "black"
                  },
                  "mode": "markers",
                  "showlegend": false,
                  "type": "scatter",
                  "x": [
                    0.7136400838677608,
                    0.9006034133878535,
                    0.8692835965278367,
                    0.5057545992385941,
                    0.6267200852145871,
                    0.7425811099159476,
                    0.7908057650730669,
                    0.8615560656892243,
                    0.7674165525662214,
                    1.1205479190532555
                  ],
                  "y": [
                    -40,
                    -72.5,
                    -36.25,
                    -10,
                    -130,
                    -110,
                    -160,
                    -170,
                    -123.75,
                    -35
                  ]
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "旅行_历史_河南_中国_泉州",
                    "地方_西安_很多_一天_写真",
                    "酒店_民宿_地方_感受_体验",
                    "旅行_河南_历史_中国_地方",
                    "项目_建设_发展_规划_工作",
                    "旅客_景区_高速_门票_年票",
                    "游客_景区_显示_假期_五一",
                    "景区_游客_旅客_郑州_门票",
                    "景区_游客_项目_活动_发展"
                  ],
                  "marker": {
                    "color": "black"
                  },
                  "mode": "markers",
                  "showlegend": false,
                  "type": "scatter",
                  "x": [
                    0.758998907068849,
                    0.8010566606343938,
                    0.9325433489328923,
                    0.9551646121727781,
                    0.7005901732768767,
                    0.7068023546461416,
                    0.8217866214335633,
                    0.9151234346297069,
                    1.1310707399068711
                  ],
                  "y": [
                    -47.5,
                    -80,
                    -83.75,
                    -60,
                    -137.5,
                    -180,
                    -200,
                    -185,
                    -154.375
                  ]
                }
              ],
              "layout": {
                "autosize": false,
                "height": 515,
                "hoverlabel": {
                  "bgcolor": "white",
                  "font": {
                    "family": "Rockwell",
                    "size": 16
                  }
                },
                "hovermode": "closest",
                "plot_bgcolor": "#ECEFF1",
                "showlegend": false,
                "template": {
                  "data": {
                    "bar": [
                      {
                        "error_x": {
                          "color": "#2a3f5f"
                        },
                        "error_y": {
                          "color": "#2a3f5f"
                        },
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.5
                          },
                          "pattern": {
                            "fillmode": "overlay",
                            "size": 10,
                            "solidity": 0.2
                          }
                        },
                        "type": "bar"
                      }
                    ],
                    "barpolar": [
                      {
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.5
                          },
                          "pattern": {
                            "fillmode": "overlay",
                            "size": 10,
                            "solidity": 0.2
                          }
                        },
                        "type": "barpolar"
                      }
                    ],
                    "carpet": [
                      {
                        "aaxis": {
                          "endlinecolor": "#2a3f5f",
                          "gridcolor": "#C8D4E3",
                          "linecolor": "#C8D4E3",
                          "minorgridcolor": "#C8D4E3",
                          "startlinecolor": "#2a3f5f"
                        },
                        "baxis": {
                          "endlinecolor": "#2a3f5f",
                          "gridcolor": "#C8D4E3",
                          "linecolor": "#C8D4E3",
                          "minorgridcolor": "#C8D4E3",
                          "startlinecolor": "#2a3f5f"
                        },
                        "type": "carpet"
                      }
                    ],
                    "choropleth": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "type": "choropleth"
                      }
                    ],
                    "contour": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "colorscale": [
                          [
                            0,
                            "#0d0887"
                          ],
                          [
                            0.1111111111111111,
                            "#46039f"
                          ],
                          [
                            0.2222222222222222,
                            "#7201a8"
                          ],
                          [
                            0.3333333333333333,
                            "#9c179e"
                          ],
                          [
                            0.4444444444444444,
                            "#bd3786"
                          ],
                          [
                            0.5555555555555556,
                            "#d8576b"
                          ],
                          [
                            0.6666666666666666,
                            "#ed7953"
                          ],
                          [
                            0.7777777777777778,
                            "#fb9f3a"
                          ],
                          [
                            0.8888888888888888,
                            "#fdca26"
                          ],
                          [
                            1,
                            "#f0f921"
                          ]
                        ],
                        "type": "contour"
                      }
                    ],
                    "contourcarpet": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "type": "contourcarpet"
                      }
                    ],
                    "heatmap": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "colorscale": [
                          [
                            0,
                            "#0d0887"
                          ],
                          [
                            0.1111111111111111,
                            "#46039f"
                          ],
                          [
                            0.2222222222222222,
                            "#7201a8"
                          ],
                          [
                            0.3333333333333333,
                            "#9c179e"
                          ],
                          [
                            0.4444444444444444,
                            "#bd3786"
                          ],
                          [
                            0.5555555555555556,
                            "#d8576b"
                          ],
                          [
                            0.6666666666666666,
                            "#ed7953"
                          ],
                          [
                            0.7777777777777778,
                            "#fb9f3a"
                          ],
                          [
                            0.8888888888888888,
                            "#fdca26"
                          ],
                          [
                            1,
                            "#f0f921"
                          ]
                        ],
                        "type": "heatmap"
                      }
                    ],
                    "heatmapgl": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "colorscale": [
                          [
                            0,
                            "#0d0887"
                          ],
                          [
                            0.1111111111111111,
                            "#46039f"
                          ],
                          [
                            0.2222222222222222,
                            "#7201a8"
                          ],
                          [
                            0.3333333333333333,
                            "#9c179e"
                          ],
                          [
                            0.4444444444444444,
                            "#bd3786"
                          ],
                          [
                            0.5555555555555556,
                            "#d8576b"
                          ],
                          [
                            0.6666666666666666,
                            "#ed7953"
                          ],
                          [
                            0.7777777777777778,
                            "#fb9f3a"
                          ],
                          [
                            0.8888888888888888,
                            "#fdca26"
                          ],
                          [
                            1,
                            "#f0f921"
                          ]
                        ],
                        "type": "heatmapgl"
                      }
                    ],
                    "histogram": [
                      {
                        "marker": {
                          "pattern": {
                            "fillmode": "overlay",
                            "size": 10,
                            "solidity": 0.2
                          }
                        },
                        "type": "histogram"
                      }
                    ],
                    "histogram2d": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "colorscale": [
                          [
                            0,
                            "#0d0887"
                          ],
                          [
                            0.1111111111111111,
                            "#46039f"
                          ],
                          [
                            0.2222222222222222,
                            "#7201a8"
                          ],
                          [
                            0.3333333333333333,
                            "#9c179e"
                          ],
                          [
                            0.4444444444444444,
                            "#bd3786"
                          ],
                          [
                            0.5555555555555556,
                            "#d8576b"
                          ],
                          [
                            0.6666666666666666,
                            "#ed7953"
                          ],
                          [
                            0.7777777777777778,
                            "#fb9f3a"
                          ],
                          [
                            0.8888888888888888,
                            "#fdca26"
                          ],
                          [
                            1,
                            "#f0f921"
                          ]
                        ],
                        "type": "histogram2d"
                      }
                    ],
                    "histogram2dcontour": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "colorscale": [
                          [
                            0,
                            "#0d0887"
                          ],
                          [
                            0.1111111111111111,
                            "#46039f"
                          ],
                          [
                            0.2222222222222222,
                            "#7201a8"
                          ],
                          [
                            0.3333333333333333,
                            "#9c179e"
                          ],
                          [
                            0.4444444444444444,
                            "#bd3786"
                          ],
                          [
                            0.5555555555555556,
                            "#d8576b"
                          ],
                          [
                            0.6666666666666666,
                            "#ed7953"
                          ],
                          [
                            0.7777777777777778,
                            "#fb9f3a"
                          ],
                          [
                            0.8888888888888888,
                            "#fdca26"
                          ],
                          [
                            1,
                            "#f0f921"
                          ]
                        ],
                        "type": "histogram2dcontour"
                      }
                    ],
                    "mesh3d": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "type": "mesh3d"
                      }
                    ],
                    "parcoords": [
                      {
                        "line": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "parcoords"
                      }
                    ],
                    "pie": [
                      {
                        "automargin": true,
                        "type": "pie"
                      }
                    ],
                    "scatter": [
                      {
                        "fillpattern": {
                          "fillmode": "overlay",
                          "size": 10,
                          "solidity": 0.2
                        },
                        "type": "scatter"
                      }
                    ],
                    "scatter3d": [
                      {
                        "line": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scatter3d"
                      }
                    ],
                    "scattercarpet": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scattercarpet"
                      }
                    ],
                    "scattergeo": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scattergeo"
                      }
                    ],
                    "scattergl": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scattergl"
                      }
                    ],
                    "scattermapbox": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scattermapbox"
                      }
                    ],
                    "scatterpolar": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scatterpolar"
                      }
                    ],
                    "scatterpolargl": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scatterpolargl"
                      }
                    ],
                    "scatterternary": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 0,
                            "ticks": ""
                          }
                        },
                        "type": "scatterternary"
                      }
                    ],
                    "surface": [
                      {
                        "colorbar": {
                          "outlinewidth": 0,
                          "ticks": ""
                        },
                        "colorscale": [
                          [
                            0,
                            "#0d0887"
                          ],
                          [
                            0.1111111111111111,
                            "#46039f"
                          ],
                          [
                            0.2222222222222222,
                            "#7201a8"
                          ],
                          [
                            0.3333333333333333,
                            "#9c179e"
                          ],
                          [
                            0.4444444444444444,
                            "#bd3786"
                          ],
                          [
                            0.5555555555555556,
                            "#d8576b"
                          ],
                          [
                            0.6666666666666666,
                            "#ed7953"
                          ],
                          [
                            0.7777777777777778,
                            "#fb9f3a"
                          ],
                          [
                            0.8888888888888888,
                            "#fdca26"
                          ],
                          [
                            1,
                            "#f0f921"
                          ]
                        ],
                        "type": "surface"
                      }
                    ],
                    "table": [
                      {
                        "cells": {
                          "fill": {
                            "color": "#EBF0F8"
                          },
                          "line": {
                            "color": "white"
                          }
                        },
                        "header": {
                          "fill": {
                            "color": "#C8D4E3"
                          },
                          "line": {
                            "color": "white"
                          }
                        },
                        "type": "table"
                      }
                    ]
                  },
                  "layout": {
                    "annotationdefaults": {
                      "arrowcolor": "#2a3f5f",
                      "arrowhead": 0,
                      "arrowwidth": 1
                    },
                    "autotypenumbers": "strict",
                    "coloraxis": {
                      "colorbar": {
                        "outlinewidth": 0,
                        "ticks": ""
                      }
                    },
                    "colorscale": {
                      "diverging": [
                        [
                          0,
                          "#8e0152"
                        ],
                        [
                          0.1,
                          "#c51b7d"
                        ],
                        [
                          0.2,
                          "#de77ae"
                        ],
                        [
                          0.3,
                          "#f1b6da"
                        ],
                        [
                          0.4,
                          "#fde0ef"
                        ],
                        [
                          0.5,
                          "#f7f7f7"
                        ],
                        [
                          0.6,
                          "#e6f5d0"
                        ],
                        [
                          0.7,
                          "#b8e186"
                        ],
                        [
                          0.8,
                          "#7fbc41"
                        ],
                        [
                          0.9,
                          "#4d9221"
                        ],
                        [
                          1,
                          "#276419"
                        ]
                      ],
                      "sequential": [
                        [
                          0,
                          "#0d0887"
                        ],
                        [
                          0.1111111111111111,
                          "#46039f"
                        ],
                        [
                          0.2222222222222222,
                          "#7201a8"
                        ],
                        [
                          0.3333333333333333,
                          "#9c179e"
                        ],
                        [
                          0.4444444444444444,
                          "#bd3786"
                        ],
                        [
                          0.5555555555555556,
                          "#d8576b"
                        ],
                        [
                          0.6666666666666666,
                          "#ed7953"
                        ],
                        [
                          0.7777777777777778,
                          "#fb9f3a"
                        ],
                        [
                          0.8888888888888888,
                          "#fdca26"
                        ],
                        [
                          1,
                          "#f0f921"
                        ]
                      ],
                      "sequentialminus": [
                        [
                          0,
                          "#0d0887"
                        ],
                        [
                          0.1111111111111111,
                          "#46039f"
                        ],
                        [
                          0.2222222222222222,
                          "#7201a8"
                        ],
                        [
                          0.3333333333333333,
                          "#9c179e"
                        ],
                        [
                          0.4444444444444444,
                          "#bd3786"
                        ],
                        [
                          0.5555555555555556,
                          "#d8576b"
                        ],
                        [
                          0.6666666666666666,
                          "#ed7953"
                        ],
                        [
                          0.7777777777777778,
                          "#fb9f3a"
                        ],
                        [
                          0.8888888888888888,
                          "#fdca26"
                        ],
                        [
                          1,
                          "#f0f921"
                        ]
                      ]
                    },
                    "colorway": [
                      "#636efa",
                      "#EF553B",
                      "#00cc96",
                      "#ab63fa",
                      "#FFA15A",
                      "#19d3f3",
                      "#FF6692",
                      "#B6E880",
                      "#FF97FF",
                      "#FECB52"
                    ],
                    "font": {
                      "color": "#2a3f5f"
                    },
                    "geo": {
                      "bgcolor": "white",
                      "lakecolor": "white",
                      "landcolor": "white",
                      "showlakes": true,
                      "showland": true,
                      "subunitcolor": "#C8D4E3"
                    },
                    "hoverlabel": {
                      "align": "left"
                    },
                    "hovermode": "closest",
                    "mapbox": {
                      "style": "light"
                    },
                    "paper_bgcolor": "white",
                    "plot_bgcolor": "white",
                    "polar": {
                      "angularaxis": {
                        "gridcolor": "#EBF0F8",
                        "linecolor": "#EBF0F8",
                        "ticks": ""
                      },
                      "bgcolor": "white",
                      "radialaxis": {
                        "gridcolor": "#EBF0F8",
                        "linecolor": "#EBF0F8",
                        "ticks": ""
                      }
                    },
                    "scene": {
                      "xaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "#DFE8F3",
                        "gridwidth": 2,
                        "linecolor": "#EBF0F8",
                        "showbackground": true,
                        "ticks": "",
                        "zerolinecolor": "#EBF0F8"
                      },
                      "yaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "#DFE8F3",
                        "gridwidth": 2,
                        "linecolor": "#EBF0F8",
                        "showbackground": true,
                        "ticks": "",
                        "zerolinecolor": "#EBF0F8"
                      },
                      "zaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "#DFE8F3",
                        "gridwidth": 2,
                        "linecolor": "#EBF0F8",
                        "showbackground": true,
                        "ticks": "",
                        "zerolinecolor": "#EBF0F8"
                      }
                    },
                    "shapedefaults": {
                      "line": {
                        "color": "#2a3f5f"
                      }
                    },
                    "ternary": {
                      "aaxis": {
                        "gridcolor": "#DFE8F3",
                        "linecolor": "#A2B1C6",
                        "ticks": ""
                      },
                      "baxis": {
                        "gridcolor": "#DFE8F3",
                        "linecolor": "#A2B1C6",
                        "ticks": ""
                      },
                      "bgcolor": "white",
                      "caxis": {
                        "gridcolor": "#DFE8F3",
                        "linecolor": "#A2B1C6",
                        "ticks": ""
                      }
                    },
                    "title": {
                      "x": 0.05
                    },
                    "xaxis": {
                      "automargin": true,
                      "gridcolor": "#EBF0F8",
                      "linecolor": "#EBF0F8",
                      "ticks": "",
                      "title": {
                        "standoff": 15
                      },
                      "zerolinecolor": "#EBF0F8",
                      "zerolinewidth": 2
                    },
                    "yaxis": {
                      "automargin": true,
                      "gridcolor": "#EBF0F8",
                      "linecolor": "#EBF0F8",
                      "ticks": "",
                      "title": {
                        "standoff": 15
                      },
                      "zerolinecolor": "#EBF0F8",
                      "zerolinewidth": 2
                    }
                  }
                },
                "title": {
                  "font": {
                    "color": "Black",
                    "size": 22
                  },
                  "text": "<b>Hierarchical Clustering</b>",
                  "x": 0.5,
                  "xanchor": "center",
                  "yanchor": "top"
                },
                "width": 1000,
                "xaxis": {
                  "mirror": "allticks",
                  "rangemode": "tozero",
                  "showgrid": false,
                  "showline": true,
                  "showticklabels": true,
                  "ticks": "outside",
                  "type": "linear",
                  "zeroline": false
                },
                "yaxis": {
                  "mirror": "allticks",
                  "range": [
                    -210,
                    0
                  ],
                  "rangemode": "tozero",
                  "showgrid": false,
                  "showline": true,
                  "showticklabels": true,
                  "tickmode": "array",
                  "ticks": "outside",
                  "ticktext": [
                    "19_福昌_龙门石窟_城隍庙",
                    "2_石窟_中国_龙门石窟",
                    "9_河南_造纸_巩义",
                    "6_泉州_洛阳桥_旅行",
                    "1_王府_竹海_旅行",
                    "12_广济桥_位于_白马寺",
                    "20_民宿_酒店_巧克力",
                    "5_地方_很多_一天",
                    "15_写真_发团_成人",
                    "18_话题_大寒_隋唐洛阳城",
                    "11_银杏_文旅文创_发展",
                    "16_博物馆_历史_停车场",
                    "4_机场_建设_规划",
                    "10_项目_消费_文旅",
                    "7_工作_集团_河洛",
                    "17_景区_度假区_公示",
                    "13_防控_疫情_景区",
                    "0_活动_门票_景区",
                    "3_旅客_年票_客流",
                    "8_游客_景区_午餐",
                    "14_五一_数据_预订"
                  ],
                  "tickvals": [
                    -5,
                    -15,
                    -25,
                    -35,
                    -45,
                    -55,
                    -65,
                    -75,
                    -85,
                    -95,
                    -105,
                    -115,
                    -125,
                    -135,
                    -145,
                    -155,
                    -165,
                    -175,
                    -185,
                    -195,
                    -205
                  ],
                  "type": "linear",
                  "zeroline": false
                }
              }
            }
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "hierarchical_topics = topic_model.hierarchical_topics(docs)\n",
        "topic_model.visualize_hierarchy(hierarchical_topics=hierarchical_topics)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# 合并主题"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Topic</th>\n",
              "      <th>Count</th>\n",
              "      <th>Name</th>\n",
              "      <th>Representation</th>\n",
              "      <th>Representative_Docs</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>-1</td>\n",
              "      <td>335</td>\n",
              "      <td>-1_景区_河南_城市_中国</td>\n",
              "      <td>[景区, 河南, 城市, 中国, 游客, 活动, 洛阳市, 博物馆, 遗址, 发展]</td>\n",
              "      <td>[河南 多家 景区 陆续 发布 开园 公告 台风 杜苏芮 强度 逐渐 减弱 河南 景区 陆续...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>244</td>\n",
              "      <td>0_河南_旅行_历史_中国</td>\n",
              "      <td>[河南, 旅行, 历史, 中国, 景区, 地方, 古城, 位于, 泉州, 郑州]</td>\n",
              "      <td>[文旅 河南 Hello 世界 外国 嘉宾 河南 印象 河南 历史 文化 圈粉 无数 日本 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1</td>\n",
              "      <td>205</td>\n",
              "      <td>1_景区_游客_郑州_旅客</td>\n",
              "      <td>[景区, 游客, 郑州, 旅客, 活动, 门票, 年票, 高速, 假期, 时间]</td>\n",
              "      <td>[洛阳 热门 栾川县 八大 景区 洛阳 市民 门票 第七个 中国 旅游 栾川县 八大 景区 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>2</td>\n",
              "      <td>154</td>\n",
              "      <td>2_建设_发展_项目_河南</td>\n",
              "      <td>[建设, 发展, 项目, 河南, 博物馆, 国家, 工作, 文旅, 洛阳市, 城市]</td>\n",
              "      <td>[行走 河南 读懂 中国 关注 全省 文旅文创 发展 大会 二十大 报告 指出 坚持 以文塑...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>3</td>\n",
              "      <td>62</td>\n",
              "      <td>3_中国_龙门石窟_石窟_艺术</td>\n",
              "      <td>[中国, 龙门石窟, 石窟, 艺术, 世界, 文化遗产, 少林寺, 朝代, 造像, 位于]</td>\n",
              "      <td>[洛阳 周边游 龙门石窟 中国 石刻 艺术 宝库 现为 世界 文化遗产 全国 重点 文物保护...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Topic  Count             Name  \\\n",
              "0     -1    335   -1_景区_河南_城市_中国   \n",
              "1      0    244    0_河南_旅行_历史_中国   \n",
              "2      1    205    1_景区_游客_郑州_旅客   \n",
              "3      2    154    2_建设_发展_项目_河南   \n",
              "4      3     62  3_中国_龙门石窟_石窟_艺术   \n",
              "\n",
              "                                  Representation  \\\n",
              "0     [景区, 河南, 城市, 中国, 游客, 活动, 洛阳市, 博物馆, 遗址, 发展]   \n",
              "1       [河南, 旅行, 历史, 中国, 景区, 地方, 古城, 位于, 泉州, 郑州]   \n",
              "2       [景区, 游客, 郑州, 旅客, 活动, 门票, 年票, 高速, 假期, 时间]   \n",
              "3     [建设, 发展, 项目, 河南, 博物馆, 国家, 工作, 文旅, 洛阳市, 城市]   \n",
              "4  [中国, 龙门石窟, 石窟, 艺术, 世界, 文化遗产, 少林寺, 朝代, 造像, 位于]   \n",
              "\n",
              "                                 Representative_Docs  \n",
              "0  [河南 多家 景区 陆续 发布 开园 公告 台风 杜苏芮 强度 逐渐 减弱 河南 景区 陆续...  \n",
              "1  [文旅 河南 Hello 世界 外国 嘉宾 河南 印象 河南 历史 文化 圈粉 无数 日本 ...  \n",
              "2  [洛阳 热门 栾川县 八大 景区 洛阳 市民 门票 第七个 中国 旅游 栾川县 八大 景区 ...  \n",
              "3  [行走 河南 读懂 中国 关注 全省 文旅文创 发展 大会 二十大 报告 指出 坚持 以文塑...  \n",
              "4  [洛阳 周边游 龙门石窟 中国 石刻 艺术 宝库 现为 世界 文化遗产 全国 重点 文物保护...  "
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "topic_model.merge_topics(docs, [\n",
        "  [19, 2],\n",
        "  [9, 6, 1, 12, 20, 5, 15, 18],\n",
        "  [11, 16, 4, 10, 7],\n",
        "  [17, 13, 0, 3, 8, 14]\n",
        "])\n",
        "\n",
        "topic_info = topic_model.get_topic_info()\n",
        "topic_info"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# 动态主题模型"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "1000 [2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023]\n"
          ]
        }
      ],
      "source": [
        "# 读取时间戳\n",
        "with open('../../data/时间.txt', \"r\", encoding='utf-8') as file:\n",
        "    lines = file.readlines()\n",
        "    timestamps = [int(line.strip()) for line in lines]\n",
        "print(len(timestamps), timestamps[:10])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "application/vnd.plotly.v1+json": {
              "config": {
                "plotlyServerURL": "https://plot.ly"
              },
              "data": [
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 0</b><br>Words: 三彩, 河南, 中国, 成人, 酒店, 儿童, 沧州, 艺术, 洛阳市, 旅行",
                    "<b>Topic 0</b><br>Words: 河南, 历史, 旅行, 中国, 郑州, 济南, 景区, 水席, 古城, 日本",
                    "<b>Topic 0</b><br>Words: 河南, 历史, 中国, 旅行, 广济桥, 古城, 很多, 赵匡胤, 潮州, 位于",
                    "<b>Topic 0</b><br>Words: 民宿, 旅行, 河南, 历史, 中国, 写真, 景区, 大理, 古城, 郑州",
                    "<b>Topic 0</b><br>Words: 旅行, 河南, 仙门, 历史, 地方, 风起, 处理, 黄河, 景区, 白马寺",
                    "<b>Topic 0</b><br>Words: 王府, 竹海, 景区, 旅行, 河南, 中国, 历史, 地方, 洛阳桥, 造纸",
                    "<b>Topic 0</b><br>Words: 旅行, 河南, 历史, 古城, 景区, 地方, 王府, 竹海, 打卡, 中国"
                  ],
                  "marker": {
                    "color": "#E69F00"
                  },
                  "mode": "lines",
                  "name": "0_河南_旅行_历史_中国",
                  "type": "scatter",
                  "x": [
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    20,
                    39,
                    36,
                    33,
                    41,
                    36,
                    39
                  ]
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 1</b><br>Words: 景区, 公厕, 度假区, 项目, 游客, 韩国, 白云山, 洛阳市, 优选, 民生",
                    "<b>Topic 1</b><br>Words: 景区, 游客, 活动, 旅客, 门票, 度假区, 期间, 市民, 公示, 郑州",
                    "<b>Topic 1</b><br>Words: 景区, 年票, 旅客, 郑州, 游客, 高速, 客流, 活动, 假期, 免费",
                    "<b>Topic 1</b><br>Words: 景区, 游客, 门票, 旅客, 优惠, 年票, 执行, 列车, 半价, 活动",
                    "<b>Topic 1</b><br>Words: 景区, 午餐, 防控, 游客, 复工, 一元, 复产, 落实, 国家, 郑州",
                    "<b>Topic 1</b><br>Words: 景区, 城市, 假期, 开放, 游客, 疫情, 防控, 郑州, 地图, 时间",
                    "<b>Topic 1</b><br>Words: 景区, 疫情, 防控, 高速, 游客, 郑州, 客运, 暂时, 场所, 开放",
                    "<b>Topic 1</b><br>Words: 景区, 游客, 线路, 公交, 假期, 五一, 门票, 时间, 显示, 老君山"
                  ],
                  "marker": {
                    "color": "#56B4E9"
                  },
                  "mode": "lines",
                  "name": "1_景区_游客_郑州_旅客",
                  "type": "scatter",
                  "x": [
                    2016,
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    12,
                    31,
                    45,
                    13,
                    12,
                    30,
                    30,
                    32
                  ]
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 2</b><br>Words: 标准化, 项目, 建设, 发展, 工作, 学习, 景区, 服务, 集团, 旅发",
                    "<b>Topic 2</b><br>Words: 建设, 银杏, 发展, 博物馆, 活动, 项目, 主题, 白云山, 河洛, 国家",
                    "<b>Topic 2</b><br>Words: 建设, 发展, 博物馆, 机场, 项目, 小镇, 规划, 片区, 洛阳市, 工作",
                    "<b>Topic 2</b><br>Words: 建设, 项目, 机场, 自驾车, 历史, 规划, 发展, 城市, 片区, 我市",
                    "<b>Topic 2</b><br>Words: 建设, 项目, 发展, 连云港, 规划, 三门峡, 郑州, 城市, 河洛, 消费",
                    "<b>Topic 2</b><br>Words: 发展, 建设, 中医药, 项目, 文旅, 博物馆, 城市, 国家, 产业, 打造",
                    "<b>Topic 2</b><br>Words: 建设, 项目, 黄河, 发展, 洛阳市, 工作, 河南省, 生态, 城市, 集团",
                    "<b>Topic 2</b><br>Words: 文旅, 项目, 大会, 河南, 文旅文创, 发展, 行走, 读懂, 建设, 国家"
                  ],
                  "marker": {
                    "color": "#009E73"
                  },
                  "mode": "lines",
                  "name": "2_建设_发展_项目_河南",
                  "type": "scatter",
                  "x": [
                    2016,
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    12,
                    29,
                    20,
                    25,
                    19,
                    12,
                    19,
                    18
                  ]
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 3</b><br>Words: 龙门石窟, 艺术, 中国, 石窟, 朝代, 世界, 发展, 文化遗产, 佛教, 年间",
                    "<b>Topic 3</b><br>Words: 中国, 大殿, 龙门石窟, 少林寺, 福昌, 石窟, 世界, 艺术, 位于, 文化遗产",
                    "<b>Topic 3</b><br>Words: 中国, 龙门石窟, 石窟, 艺术, 世界, 文化遗产, 朝代, 造像, 石刻, 发展",
                    "<b>Topic 3</b><br>Words: 中国, 龙门石窟, 石窟, 艺术, 世界, 文化遗产, 少林寺, 佛教, 莫高窟, 朝代",
                    "<b>Topic 3</b><br>Words: 龙门石窟, 中国, 石窟, 艺术, 朝代, 世界, 造像, 文化遗产, 龙门, 开凿",
                    "<b>Topic 3</b><br>Words: 石窟, 中国, 龙门石窟, 世界, 少林寺, 文化遗产, 石刻, 艺术, 永宁寺, 造像",
                    "<b>Topic 3</b><br>Words: 少林寺, 出土, 公元, 中国, 天堂, 嵩山, 世界, 少林功夫, 佛教, 忠县",
                    "<b>Topic 3</b><br>Words: 城隍庙, 石窟, 世界, 龙门石窟, 中国, 造像, 修缮, 艺术, 河南, 皇家"
                  ],
                  "marker": {
                    "color": "#F0E442"
                  },
                  "mode": "lines",
                  "name": "3_中国_龙门石窟_石窟_艺术",
                  "type": "scatter",
                  "x": [
                    2016,
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    3,
                    6,
                    14,
                    14,
                    11,
                    7,
                    4,
                    3
                  ]
                }
              ],
              "layout": {
                "height": 450,
                "hoverlabel": {
                  "bgcolor": "white",
                  "font": {
                    "family": "Rockwell",
                    "size": 16
                  }
                },
                "legend": {
                  "title": {
                    "text": "<b>Global Topic Representation"
                  }
                },
                "template": {
                  "data": {
                    "bar": [
                      {
                        "error_x": {
                          "color": "rgb(36,36,36)"
                        },
                        "error_y": {
                          "color": "rgb(36,36,36)"
                        },
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.5
                          },
                          "pattern": {
                            "fillmode": "overlay",
                            "size": 10,
                            "solidity": 0.2
                          }
                        },
                        "type": "bar"
                      }
                    ],
                    "barpolar": [
                      {
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.5
                          },
                          "pattern": {
                            "fillmode": "overlay",
                            "size": 10,
                            "solidity": 0.2
                          }
                        },
                        "type": "barpolar"
                      }
                    ],
                    "carpet": [
                      {
                        "aaxis": {
                          "endlinecolor": "rgb(36,36,36)",
                          "gridcolor": "white",
                          "linecolor": "white",
                          "minorgridcolor": "white",
                          "startlinecolor": "rgb(36,36,36)"
                        },
                        "baxis": {
                          "endlinecolor": "rgb(36,36,36)",
                          "gridcolor": "white",
                          "linecolor": "white",
                          "minorgridcolor": "white",
                          "startlinecolor": "rgb(36,36,36)"
                        },
                        "type": "carpet"
                      }
                    ],
                    "choropleth": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "type": "choropleth"
                      }
                    ],
                    "contour": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "contour"
                      }
                    ],
                    "contourcarpet": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "type": "contourcarpet"
                      }
                    ],
                    "heatmap": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "heatmap"
                      }
                    ],
                    "heatmapgl": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "heatmapgl"
                      }
                    ],
                    "histogram": [
                      {
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.6
                          }
                        },
                        "type": "histogram"
                      }
                    ],
                    "histogram2d": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "histogram2d"
                      }
                    ],
                    "histogram2dcontour": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "histogram2dcontour"
                      }
                    ],
                    "mesh3d": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "type": "mesh3d"
                      }
                    ],
                    "parcoords": [
                      {
                        "line": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "parcoords"
                      }
                    ],
                    "pie": [
                      {
                        "automargin": true,
                        "type": "pie"
                      }
                    ],
                    "scatter": [
                      {
                        "fillpattern": {
                          "fillmode": "overlay",
                          "size": 10,
                          "solidity": 0.2
                        },
                        "type": "scatter"
                      }
                    ],
                    "scatter3d": [
                      {
                        "line": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatter3d"
                      }
                    ],
                    "scattercarpet": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattercarpet"
                      }
                    ],
                    "scattergeo": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattergeo"
                      }
                    ],
                    "scattergl": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattergl"
                      }
                    ],
                    "scattermapbox": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattermapbox"
                      }
                    ],
                    "scatterpolar": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatterpolar"
                      }
                    ],
                    "scatterpolargl": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatterpolargl"
                      }
                    ],
                    "scatterternary": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatterternary"
                      }
                    ],
                    "surface": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "surface"
                      }
                    ],
                    "table": [
                      {
                        "cells": {
                          "fill": {
                            "color": "rgb(237,237,237)"
                          },
                          "line": {
                            "color": "white"
                          }
                        },
                        "header": {
                          "fill": {
                            "color": "rgb(217,217,217)"
                          },
                          "line": {
                            "color": "white"
                          }
                        },
                        "type": "table"
                      }
                    ]
                  },
                  "layout": {
                    "annotationdefaults": {
                      "arrowhead": 0,
                      "arrowwidth": 1
                    },
                    "autotypenumbers": "strict",
                    "coloraxis": {
                      "colorbar": {
                        "outlinewidth": 1,
                        "tickcolor": "rgb(36,36,36)",
                        "ticks": "outside"
                      }
                    },
                    "colorscale": {
                      "diverging": [
                        [
                          0,
                          "rgb(103,0,31)"
                        ],
                        [
                          0.1,
                          "rgb(178,24,43)"
                        ],
                        [
                          0.2,
                          "rgb(214,96,77)"
                        ],
                        [
                          0.3,
                          "rgb(244,165,130)"
                        ],
                        [
                          0.4,
                          "rgb(253,219,199)"
                        ],
                        [
                          0.5,
                          "rgb(247,247,247)"
                        ],
                        [
                          0.6,
                          "rgb(209,229,240)"
                        ],
                        [
                          0.7,
                          "rgb(146,197,222)"
                        ],
                        [
                          0.8,
                          "rgb(67,147,195)"
                        ],
                        [
                          0.9,
                          "rgb(33,102,172)"
                        ],
                        [
                          1,
                          "rgb(5,48,97)"
                        ]
                      ],
                      "sequential": [
                        [
                          0,
                          "#440154"
                        ],
                        [
                          0.1111111111111111,
                          "#482878"
                        ],
                        [
                          0.2222222222222222,
                          "#3e4989"
                        ],
                        [
                          0.3333333333333333,
                          "#31688e"
                        ],
                        [
                          0.4444444444444444,
                          "#26828e"
                        ],
                        [
                          0.5555555555555556,
                          "#1f9e89"
                        ],
                        [
                          0.6666666666666666,
                          "#35b779"
                        ],
                        [
                          0.7777777777777778,
                          "#6ece58"
                        ],
                        [
                          0.8888888888888888,
                          "#b5de2b"
                        ],
                        [
                          1,
                          "#fde725"
                        ]
                      ],
                      "sequentialminus": [
                        [
                          0,
                          "#440154"
                        ],
                        [
                          0.1111111111111111,
                          "#482878"
                        ],
                        [
                          0.2222222222222222,
                          "#3e4989"
                        ],
                        [
                          0.3333333333333333,
                          "#31688e"
                        ],
                        [
                          0.4444444444444444,
                          "#26828e"
                        ],
                        [
                          0.5555555555555556,
                          "#1f9e89"
                        ],
                        [
                          0.6666666666666666,
                          "#35b779"
                        ],
                        [
                          0.7777777777777778,
                          "#6ece58"
                        ],
                        [
                          0.8888888888888888,
                          "#b5de2b"
                        ],
                        [
                          1,
                          "#fde725"
                        ]
                      ]
                    },
                    "colorway": [
                      "#1F77B4",
                      "#FF7F0E",
                      "#2CA02C",
                      "#D62728",
                      "#9467BD",
                      "#8C564B",
                      "#E377C2",
                      "#7F7F7F",
                      "#BCBD22",
                      "#17BECF"
                    ],
                    "font": {
                      "color": "rgb(36,36,36)"
                    },
                    "geo": {
                      "bgcolor": "white",
                      "lakecolor": "white",
                      "landcolor": "white",
                      "showlakes": true,
                      "showland": true,
                      "subunitcolor": "white"
                    },
                    "hoverlabel": {
                      "align": "left"
                    },
                    "hovermode": "closest",
                    "mapbox": {
                      "style": "light"
                    },
                    "paper_bgcolor": "white",
                    "plot_bgcolor": "white",
                    "polar": {
                      "angularaxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      },
                      "bgcolor": "white",
                      "radialaxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      }
                    },
                    "scene": {
                      "xaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "rgb(232,232,232)",
                        "gridwidth": 2,
                        "linecolor": "rgb(36,36,36)",
                        "showbackground": true,
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside",
                        "zeroline": false,
                        "zerolinecolor": "rgb(36,36,36)"
                      },
                      "yaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "rgb(232,232,232)",
                        "gridwidth": 2,
                        "linecolor": "rgb(36,36,36)",
                        "showbackground": true,
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside",
                        "zeroline": false,
                        "zerolinecolor": "rgb(36,36,36)"
                      },
                      "zaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "rgb(232,232,232)",
                        "gridwidth": 2,
                        "linecolor": "rgb(36,36,36)",
                        "showbackground": true,
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside",
                        "zeroline": false,
                        "zerolinecolor": "rgb(36,36,36)"
                      }
                    },
                    "shapedefaults": {
                      "fillcolor": "black",
                      "line": {
                        "width": 0
                      },
                      "opacity": 0.3
                    },
                    "ternary": {
                      "aaxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      },
                      "baxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      },
                      "bgcolor": "white",
                      "caxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      }
                    },
                    "title": {
                      "x": 0.05
                    },
                    "xaxis": {
                      "automargin": true,
                      "gridcolor": "rgb(232,232,232)",
                      "linecolor": "rgb(36,36,36)",
                      "showgrid": false,
                      "showline": true,
                      "ticks": "outside",
                      "title": {
                        "standoff": 15
                      },
                      "zeroline": false,
                      "zerolinecolor": "rgb(36,36,36)"
                    },
                    "yaxis": {
                      "automargin": true,
                      "gridcolor": "rgb(232,232,232)",
                      "linecolor": "rgb(36,36,36)",
                      "showgrid": false,
                      "showline": true,
                      "ticks": "outside",
                      "title": {
                        "standoff": 15
                      },
                      "zeroline": false,
                      "zerolinecolor": "rgb(36,36,36)"
                    }
                  }
                },
                "title": {
                  "font": {
                    "color": "Black",
                    "size": 22
                  },
                  "text": "<b>Topics over Time</b>",
                  "x": 0.4,
                  "xanchor": "center",
                  "y": 0.95,
                  "yanchor": "top"
                },
                "width": 1250,
                "xaxis": {
                  "showgrid": true
                },
                "yaxis": {
                  "showgrid": true,
                  "title": {
                    "text": "Frequency"
                  }
                }
              }
            }
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "topics_over_time = topic_model.topics_over_time(docs, timestamps)\n",
        "topic_model.visualize_topics_over_time(topics_over_time)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# 参数调整"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "application/vnd.plotly.v1+json": {
              "config": {
                "plotlyServerURL": "https://plot.ly"
              },
              "data": [
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 0</b><br>Words: 三彩, 成人, 儿童, 酒店, 沧州, 中国, 河南, 白云山, 艺术, 洛阳市",
                    "<b>Topic 0</b><br>Words: 河南, 历史, 济南, 中国, 旅行, 水席, 巩义, 日本, 地点, 郑州",
                    "<b>Topic 0</b><br>Words: 历史, 广济桥, 河南, 赵匡胤, 潮州, 中国, 很多, 江南, 一座, 洛阳桥",
                    "<b>Topic 0</b><br>Words: 民宿, 写真, 大理, 黄陂, 旅行, 历史, 中国, 考古队, 图片, 古城",
                    "<b>Topic 0</b><br>Words: 仙门, 旅行, 风起, 处理, 话题, 黄河, 发团, 咖啡, 地方, 不良",
                    "<b>Topic 0</b><br>Words: 王府, 竹海, 景区, 造纸, 旅行, 洛阳桥, 理由, 龙亭, 推荐, 露营",
                    "<b>Topic 0</b><br>Words: 旅行, 古城, 河南, 游泳, 地方, 打卡, 景区, 王府, 历史, 竹海"
                  ],
                  "marker": {
                    "color": "#E69F00"
                  },
                  "mode": "lines",
                  "name": "0_河南_旅行_历史_中国",
                  "type": "scatter",
                  "x": [
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    20,
                    39,
                    36,
                    33,
                    41,
                    36,
                    39
                  ]
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 1</b><br>Words: 公厕, 度假区, 项目, 韩国, 优选, 白云山, 民生, 法华寺, 建议, 景区",
                    "<b>Topic 1</b><br>Words: 景区, 活动, 游客, 门票, 旅客, 度假区, 期间, 公示, 市民, 价格",
                    "<b>Topic 1</b><br>Words: 年票, 旅客, 郑州, 景区, 客流, 发送, 高峰, 高速, 免费, 续费",
                    "<b>Topic 1</b><br>Words: 景区, 门票, 游客, 优惠, 执行, 半价, 旅客, 列车, 智慧, 优惠政策",
                    "<b>Topic 1</b><br>Words: 景区, 午餐, 复工, 防控, 一元, 复产, 落实, 无人, 多出, 国家",
                    "<b>Topic 1</b><br>Words: 景区, 城市, 开放, 假期, 地图, 疫情, 清明, 北京, 防控, 目前",
                    "<b>Topic 1</b><br>Words: 景区, 疫情, 防控, 客运, 暂时, 高速, 场所, 暂停, 郑州, 班线",
                    "<b>Topic 1</b><br>Words: 景区, 线路, 游客, 公交, 五一, 同期, 取消, 增长, 显示, 假期"
                  ],
                  "marker": {
                    "color": "#56B4E9"
                  },
                  "mode": "lines",
                  "name": "1_景区_游客_郑州_旅客",
                  "type": "scatter",
                  "x": [
                    2016,
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    12,
                    31,
                    45,
                    13,
                    12,
                    30,
                    30,
                    32
                  ]
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 2</b><br>Words: 标准化, 学习, 工作, 景区, 服务, 旅发, 项目, 园中, 集团, 建设",
                    "<b>Topic 2</b><br>Words: 银杏, 白云山, 主题, 活动, 博物馆, 河洛, 建设, 发展, 大鼓, 第九届",
                    "<b>Topic 2</b><br>Words: 建设, 小镇, 发展, 机场, 片区, 博物馆, 温泉, 航班时刻, 规划, 协会",
                    "<b>Topic 2</b><br>Words: 自驾车, 机场, 建设, 项目, 历史, 规划, 南通, 航线, 片区, 人大代表",
                    "<b>Topic 2</b><br>Words: 连云港, 三门峡, 郑州, 码头, 建设, 航道, 停车场, 列车, 项目, 规划",
                    "<b>Topic 2</b><br>Words: 发展, 中医药, 文旅, 灵山, 产业, 河山, 博物馆, 城市, 建设, 国家",
                    "<b>Topic 2</b><br>Words: 黄河, 生态, 洛阳市, 工作, 河南省, 集团, 建设, 公路, 古籍, 书房",
                    "<b>Topic 2</b><br>Words: 文旅, 大会, 文旅文创, 河南, 项目, 行走, 读懂, 发展, 文化公园, 黄河"
                  ],
                  "marker": {
                    "color": "#009E73"
                  },
                  "mode": "lines",
                  "name": "2_建设_发展_项目_河南",
                  "type": "scatter",
                  "x": [
                    2016,
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    12,
                    29,
                    20,
                    25,
                    19,
                    12,
                    19,
                    18
                  ]
                },
                {
                  "hoverinfo": "text",
                  "hovertext": [
                    "<b>Topic 3</b><br>Words: 龙门石窟, 艺术, 中国, 邮票, 石窟, 朝代, 印度, 发展, 年间, 西行",
                    "<b>Topic 3</b><br>Words: 大殿, 福昌, 兴福寺, 少林寺, 中国, 位于, 景区, 小浪底, 洛阳城, 世界",
                    "<b>Topic 3</b><br>Words: 中国, 龙门石窟, 石窟, 艺术, 文化遗产, 朝代, 造像, 世界, 石刻, 碑刻",
                    "<b>Topic 3</b><br>Words: 中国, 艺术, 龙门石窟, 石窟, 世界, 佛教, 文化遗产, 少林寺, 莫高窟, 功夫",
                    "<b>Topic 3</b><br>Words: 龙门石窟, 中国, 石窟, 艺术, 朝代, 造像, 龙门, 余年, 开凿, 世界",
                    "<b>Topic 3</b><br>Words: 石窟, 世界, 永宁寺, 什伐, 博物馆, 中国, 石刻, 龙门石窟, 标本, 少林寺",
                    "<b>Topic 3</b><br>Words: 少林寺, 出土, 公元, 天堂, 嵩山, 少林功夫, 涂井, 忠县, 三国, 佛教",
                    "<b>Topic 3</b><br>Words: 城隍庙, 修缮, 皇家, 河南, 石窟, 世界, 孔庙, 造像, 工程施工, 专家组"
                  ],
                  "marker": {
                    "color": "#F0E442"
                  },
                  "mode": "lines",
                  "name": "3_中国_龙门石窟_石窟_艺术",
                  "type": "scatter",
                  "x": [
                    2016,
                    2017,
                    2018,
                    2019,
                    2020,
                    2021,
                    2022,
                    2023
                  ],
                  "y": [
                    3,
                    6,
                    14,
                    14,
                    11,
                    7,
                    4,
                    3
                  ]
                }
              ],
              "layout": {
                "height": 450,
                "hoverlabel": {
                  "bgcolor": "white",
                  "font": {
                    "family": "Rockwell",
                    "size": 16
                  }
                },
                "legend": {
                  "title": {
                    "text": "<b>Global Topic Representation"
                  }
                },
                "template": {
                  "data": {
                    "bar": [
                      {
                        "error_x": {
                          "color": "rgb(36,36,36)"
                        },
                        "error_y": {
                          "color": "rgb(36,36,36)"
                        },
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.5
                          },
                          "pattern": {
                            "fillmode": "overlay",
                            "size": 10,
                            "solidity": 0.2
                          }
                        },
                        "type": "bar"
                      }
                    ],
                    "barpolar": [
                      {
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.5
                          },
                          "pattern": {
                            "fillmode": "overlay",
                            "size": 10,
                            "solidity": 0.2
                          }
                        },
                        "type": "barpolar"
                      }
                    ],
                    "carpet": [
                      {
                        "aaxis": {
                          "endlinecolor": "rgb(36,36,36)",
                          "gridcolor": "white",
                          "linecolor": "white",
                          "minorgridcolor": "white",
                          "startlinecolor": "rgb(36,36,36)"
                        },
                        "baxis": {
                          "endlinecolor": "rgb(36,36,36)",
                          "gridcolor": "white",
                          "linecolor": "white",
                          "minorgridcolor": "white",
                          "startlinecolor": "rgb(36,36,36)"
                        },
                        "type": "carpet"
                      }
                    ],
                    "choropleth": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "type": "choropleth"
                      }
                    ],
                    "contour": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "contour"
                      }
                    ],
                    "contourcarpet": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "type": "contourcarpet"
                      }
                    ],
                    "heatmap": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "heatmap"
                      }
                    ],
                    "heatmapgl": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "heatmapgl"
                      }
                    ],
                    "histogram": [
                      {
                        "marker": {
                          "line": {
                            "color": "white",
                            "width": 0.6
                          }
                        },
                        "type": "histogram"
                      }
                    ],
                    "histogram2d": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "histogram2d"
                      }
                    ],
                    "histogram2dcontour": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "histogram2dcontour"
                      }
                    ],
                    "mesh3d": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "type": "mesh3d"
                      }
                    ],
                    "parcoords": [
                      {
                        "line": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "parcoords"
                      }
                    ],
                    "pie": [
                      {
                        "automargin": true,
                        "type": "pie"
                      }
                    ],
                    "scatter": [
                      {
                        "fillpattern": {
                          "fillmode": "overlay",
                          "size": 10,
                          "solidity": 0.2
                        },
                        "type": "scatter"
                      }
                    ],
                    "scatter3d": [
                      {
                        "line": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatter3d"
                      }
                    ],
                    "scattercarpet": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattercarpet"
                      }
                    ],
                    "scattergeo": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattergeo"
                      }
                    ],
                    "scattergl": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattergl"
                      }
                    ],
                    "scattermapbox": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scattermapbox"
                      }
                    ],
                    "scatterpolar": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatterpolar"
                      }
                    ],
                    "scatterpolargl": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatterpolargl"
                      }
                    ],
                    "scatterternary": [
                      {
                        "marker": {
                          "colorbar": {
                            "outlinewidth": 1,
                            "tickcolor": "rgb(36,36,36)",
                            "ticks": "outside"
                          }
                        },
                        "type": "scatterternary"
                      }
                    ],
                    "surface": [
                      {
                        "colorbar": {
                          "outlinewidth": 1,
                          "tickcolor": "rgb(36,36,36)",
                          "ticks": "outside"
                        },
                        "colorscale": [
                          [
                            0,
                            "#440154"
                          ],
                          [
                            0.1111111111111111,
                            "#482878"
                          ],
                          [
                            0.2222222222222222,
                            "#3e4989"
                          ],
                          [
                            0.3333333333333333,
                            "#31688e"
                          ],
                          [
                            0.4444444444444444,
                            "#26828e"
                          ],
                          [
                            0.5555555555555556,
                            "#1f9e89"
                          ],
                          [
                            0.6666666666666666,
                            "#35b779"
                          ],
                          [
                            0.7777777777777778,
                            "#6ece58"
                          ],
                          [
                            0.8888888888888888,
                            "#b5de2b"
                          ],
                          [
                            1,
                            "#fde725"
                          ]
                        ],
                        "type": "surface"
                      }
                    ],
                    "table": [
                      {
                        "cells": {
                          "fill": {
                            "color": "rgb(237,237,237)"
                          },
                          "line": {
                            "color": "white"
                          }
                        },
                        "header": {
                          "fill": {
                            "color": "rgb(217,217,217)"
                          },
                          "line": {
                            "color": "white"
                          }
                        },
                        "type": "table"
                      }
                    ]
                  },
                  "layout": {
                    "annotationdefaults": {
                      "arrowhead": 0,
                      "arrowwidth": 1
                    },
                    "autotypenumbers": "strict",
                    "coloraxis": {
                      "colorbar": {
                        "outlinewidth": 1,
                        "tickcolor": "rgb(36,36,36)",
                        "ticks": "outside"
                      }
                    },
                    "colorscale": {
                      "diverging": [
                        [
                          0,
                          "rgb(103,0,31)"
                        ],
                        [
                          0.1,
                          "rgb(178,24,43)"
                        ],
                        [
                          0.2,
                          "rgb(214,96,77)"
                        ],
                        [
                          0.3,
                          "rgb(244,165,130)"
                        ],
                        [
                          0.4,
                          "rgb(253,219,199)"
                        ],
                        [
                          0.5,
                          "rgb(247,247,247)"
                        ],
                        [
                          0.6,
                          "rgb(209,229,240)"
                        ],
                        [
                          0.7,
                          "rgb(146,197,222)"
                        ],
                        [
                          0.8,
                          "rgb(67,147,195)"
                        ],
                        [
                          0.9,
                          "rgb(33,102,172)"
                        ],
                        [
                          1,
                          "rgb(5,48,97)"
                        ]
                      ],
                      "sequential": [
                        [
                          0,
                          "#440154"
                        ],
                        [
                          0.1111111111111111,
                          "#482878"
                        ],
                        [
                          0.2222222222222222,
                          "#3e4989"
                        ],
                        [
                          0.3333333333333333,
                          "#31688e"
                        ],
                        [
                          0.4444444444444444,
                          "#26828e"
                        ],
                        [
                          0.5555555555555556,
                          "#1f9e89"
                        ],
                        [
                          0.6666666666666666,
                          "#35b779"
                        ],
                        [
                          0.7777777777777778,
                          "#6ece58"
                        ],
                        [
                          0.8888888888888888,
                          "#b5de2b"
                        ],
                        [
                          1,
                          "#fde725"
                        ]
                      ],
                      "sequentialminus": [
                        [
                          0,
                          "#440154"
                        ],
                        [
                          0.1111111111111111,
                          "#482878"
                        ],
                        [
                          0.2222222222222222,
                          "#3e4989"
                        ],
                        [
                          0.3333333333333333,
                          "#31688e"
                        ],
                        [
                          0.4444444444444444,
                          "#26828e"
                        ],
                        [
                          0.5555555555555556,
                          "#1f9e89"
                        ],
                        [
                          0.6666666666666666,
                          "#35b779"
                        ],
                        [
                          0.7777777777777778,
                          "#6ece58"
                        ],
                        [
                          0.8888888888888888,
                          "#b5de2b"
                        ],
                        [
                          1,
                          "#fde725"
                        ]
                      ]
                    },
                    "colorway": [
                      "#1F77B4",
                      "#FF7F0E",
                      "#2CA02C",
                      "#D62728",
                      "#9467BD",
                      "#8C564B",
                      "#E377C2",
                      "#7F7F7F",
                      "#BCBD22",
                      "#17BECF"
                    ],
                    "font": {
                      "color": "rgb(36,36,36)"
                    },
                    "geo": {
                      "bgcolor": "white",
                      "lakecolor": "white",
                      "landcolor": "white",
                      "showlakes": true,
                      "showland": true,
                      "subunitcolor": "white"
                    },
                    "hoverlabel": {
                      "align": "left"
                    },
                    "hovermode": "closest",
                    "mapbox": {
                      "style": "light"
                    },
                    "paper_bgcolor": "white",
                    "plot_bgcolor": "white",
                    "polar": {
                      "angularaxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      },
                      "bgcolor": "white",
                      "radialaxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      }
                    },
                    "scene": {
                      "xaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "rgb(232,232,232)",
                        "gridwidth": 2,
                        "linecolor": "rgb(36,36,36)",
                        "showbackground": true,
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside",
                        "zeroline": false,
                        "zerolinecolor": "rgb(36,36,36)"
                      },
                      "yaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "rgb(232,232,232)",
                        "gridwidth": 2,
                        "linecolor": "rgb(36,36,36)",
                        "showbackground": true,
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside",
                        "zeroline": false,
                        "zerolinecolor": "rgb(36,36,36)"
                      },
                      "zaxis": {
                        "backgroundcolor": "white",
                        "gridcolor": "rgb(232,232,232)",
                        "gridwidth": 2,
                        "linecolor": "rgb(36,36,36)",
                        "showbackground": true,
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside",
                        "zeroline": false,
                        "zerolinecolor": "rgb(36,36,36)"
                      }
                    },
                    "shapedefaults": {
                      "fillcolor": "black",
                      "line": {
                        "width": 0
                      },
                      "opacity": 0.3
                    },
                    "ternary": {
                      "aaxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      },
                      "baxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      },
                      "bgcolor": "white",
                      "caxis": {
                        "gridcolor": "rgb(232,232,232)",
                        "linecolor": "rgb(36,36,36)",
                        "showgrid": false,
                        "showline": true,
                        "ticks": "outside"
                      }
                    },
                    "title": {
                      "x": 0.05
                    },
                    "xaxis": {
                      "automargin": true,
                      "gridcolor": "rgb(232,232,232)",
                      "linecolor": "rgb(36,36,36)",
                      "showgrid": false,
                      "showline": true,
                      "ticks": "outside",
                      "title": {
                        "standoff": 15
                      },
                      "zeroline": false,
                      "zerolinecolor": "rgb(36,36,36)"
                    },
                    "yaxis": {
                      "automargin": true,
                      "gridcolor": "rgb(232,232,232)",
                      "linecolor": "rgb(36,36,36)",
                      "showgrid": false,
                      "showline": true,
                      "ticks": "outside",
                      "title": {
                        "standoff": 15
                      },
                      "zeroline": false,
                      "zerolinecolor": "rgb(36,36,36)"
                    }
                  }
                },
                "title": {
                  "font": {
                    "color": "Black",
                    "size": 22
                  },
                  "text": "<b>Topics over Time</b>",
                  "x": 0.4,
                  "xanchor": "center",
                  "y": 0.95,
                  "yanchor": "top"
                },
                "width": 1250,
                "xaxis": {
                  "showgrid": true
                },
                "yaxis": {
                  "showgrid": true,
                  "title": {
                    "text": "Frequency"
                  }
                }
              }
            }
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "topics_over_time = topic_model.topics_over_time(docs, timestamps, global_tuning=False, evolution_tuning=False)\n",
        "topic_model.visualize_topics_over_time(topics_over_time)"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.10.6"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
